enum {
	PLGNONE = 0x0000,
	PLGNORM = 0x0001,
	PLGSHUF = 0x0002,
	PLGRAND = 0x0003,
	PLGTYPE = 0x000F,

	PLSAUTO = 0x0000,
	PLSCMP = 0x0010,
	PLSGLOB = 0x0020,
	PLSBRE = 0x0030,
	PLSERE = 0x0040,
	PLSTYPE = 0x00F0,

	PLRNONE = 0x0000,
	PLRONCE = 0x0100,
	PLRFULL = 0x0200,
	PLRTYPE = 0x0300,

	PLVQUIET = 0x0000,
	PLVSIMPLE = 0x0400,
	PLVFULL = 0x0800,
	PLVTYPE = 0x0C00,

	PLLOOP = 0x1000,
	PLGOTO = 0x2000
};

struct playlist;

struct playlist	*playlist_create(size_t, int);
void		 playlist_destroy(struct playlist *);
void		 playlist_loop(struct playlist *);
void		 playlist_onadd(struct playlist *,
		    void (*)(void *, const char *), void *);
void		 playlist_onrem(struct playlist *,
		    void (*)(void *, const char *), void *);
void		 playlist_gbegin(struct playlist *, int);
int		 playlist_gend(struct playlist *);
void		 playlist_append(struct playlist *, const char *);
int		 playlist_add(struct playlist *, const char *, int);
int		 playlist_rem(struct playlist *, const char *, int);
const char	*playlist_current(struct playlist *);
const char 	*playlist_next(struct playlist *);
const char	*playlist_prev(struct playlist *);
const char	*playlist_search(struct playlist *, const char *, int);
#define playlist_goto(p, s, f) playlist_search((p), (s), (f) | PLGOTO)
